#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

int main(int argc, char const *argv[])
{
    // int a;
    // float b;
    // char c;
    // char d[50];

    // read(STDIN_FILENO,&a,sizeof(int));
    // printf("%d\n",a);
    // write(STDOUT_FILENO,&a,sizeof(int));

    // read(STDIN_FILENO,&b,sizeof(float));
    // printf("%f\n",b);
    // write(STDOUT_FILENO,&b,sizeof(float));

    
    // read(STDIN_FILENO,&c,sizeof(char));
    // printf("%c\n",c);
    // write(STDOUT_FILENO,&c,sizeof(char));

    
    // read(STDIN_FILENO,d,sizeof(d));
    // printf("%s\n",d);
    // write(STDOUT_FILENO,d,sizeof(d));

    // fprintf(stdout,"abc ");
    // fprintf(stderr,"xyz123");
    // pause();

    // int fd1 = open("text.txt",O_RDWR|O_CREAT|O_TRUNC,644);
    // int fd2 = open("text.txt",O_RDWR);
    // write(fd1,"abcde",5);

    // lseek(fd2,100,SEEK_SET);
    // write(fd2,"123456789",9);

    // close(fd1);
    // close(fd2);

    // char buf[100];

    // snprintf(buf,100,"%s\t%d\t%f","hello",123,3.14);

    // int a;
    // char ch[20];
    // float f;
    // sscanf(buf,"%s\t%d\t%f",ch,&a,&f);

    // printf("ch:%s\n",ch);
    // printf("a:%d\n",a);
    // printf("f:%f\n",f);

    if(argc != 3)
    {
        perror("打开文件失败！");
        return -1;
    }

    FILE *fp1 = fopen(argv[1],"r");
    FILE *fp2 = fopen(argv[2],"a+");
    if(fp1 == NULL || fp2 == NULL)
    {
        perror("打开失败！");
        return -1;
    }

    char *buf = calloc(5,20);
    while(1)
    {
    // long m = ftell(fp1);
    // int n = fread(buf,20,5,fp1);
    // if(n < 5)
    // {
    //     if(feof(fp1))
    //     {
    //         long p = ftell(fp1);
    //         fwrite(buf,p-m,1,fp2);
    //         break;
    //     }
    // }

    // if(ferror(fp1))
    // {
    //     perror("拷贝失败！");
    //     return -1;
    // }

    // fwrite(buf,20,5,fp2);

    int ch = fgetc(fp1);
    if(ch = EOF)
    {
        if(feof(fp1))
        {
            printf("拷贝完毕！");
            break;
        }
        if(ferror(fp1))
        {
            perror("拷贝失败！");
            return -1;
        }
    }
    else
    fputc(ch,fp2);
}
    fclose(fp1);
    fclose(fp2);

    return 0;
}
